%% abntex2cite.sty, v-1.7.1 laurocesar
%% Copyright 2012-2013 by abnTeX2 group at http://abntex2.googlecode.com/ 
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is the abnTeX2 team, led
%% by Lauro César Araujo. Further information are available on 
%% http://abntex2.googlecode.com/
%%
%% Creator and original mantainer: Gerald Weber <gweber@codigolivre.org.br>
%% Copyright 2001-2002 by the abnTeX group at http://abntex.codigolivre.org.br
%% 
%%
%% Revision history:
%%
%% 2013/05/22 07h05	laurocesar
%%  Adiciona a macro \footciteref para referências em notas de rodapé.
%%
%% 2013/03/08 07h00 laurocesar
%%  Corrige criaçao das macros \su@ExpandTwoArgs, \IfSubStringInString e \su@IfSubStringInString 
%%  importados de substr.sty: apenas criá-las se já não existirem 
%%
%% 2013/01/31 08h20	laurocesar
%%  Corrige uso de \singlespacing para evitar incompatibilidade com beamer.
%%
%% 2013/01/14 22h46	laurocesar
%%  Add \SingleSpacing before and \OnehalfSpacing after \bibliography command or
%%  \singlespacing and \onehalfspacing from setspace.sty if memoir is not loaded 
%%
%% 2013/01/05 14h35 laurocesar
%% Corrige uma incompatibilidade com o Beamer: adiciona a verificação da 
%% existência da length \bibindent antes de usá-la.
%%
%% 2012/12/13 22h31 laurocesar
%% Fork of the version v 1.26 2003/10/13 09:40:41 gweber created by gweber
%% Changed file name to from abntcite.sty to abntex2cite.sty
%% Removed CVS revision automation
%% Changed referentes of abnt-options.bib to abntex2-options.bib
%% 
%% The original revision history is the following:
%%
%% 2012/04/26 20h20 	laurocesar
%% Incluída as contribuições de compatibilização com o pacote backref de
%% Alan Wilter Sousa da Silva (AWSS), desenvolvida em 2005-06-26 23:13:59 GMT
%% http://comments.gmane.org/gmane.comp.tex.brazilian/11158
%% http://mtc-m18.sid.inpe.br/col/sid.inpe.br/iris@1905/2005/08.25.14.01/doc/abntcite.sty
%%
%% $Log: abntcite.sty,v $
%% Revision 1.26  2003/10/13 09:40:41  gweber
%% Passa a usar cvs-id.def para gerar informações sobre data e versão.
%%
%% Revision 1.25  2003/10/10 16:42:51  gweber
%% Passa a usar cvs-id.def para gerar informações sobre data e versão.
%%
%% Revision 1.24  2003/10/07 16:21:55  gweber
%% Informação sobre o pacote (comando \ProvidesPackage) automáticamente atualizado via
%% CVS Id tags.
%%
%% Revision 1.23  2003/09/16 12:13:16  gweber
%% A partir desta versão abntcite carrega os arquivos nbr10520-*.def com as definições
%% espeçificas destas normas. Esta alteração cumpre em parte a tarefa 931.
%%
%% Revision 1.22  2003/07/22 16:38:32  gweber
%% Implementada a aopção abnt-substyle=COPPE que ativa a opção de mesmo nome em
%% abnt-option.bib e define o comando \bibtextitlecommand de acordo.
%%
%% Revision 1.21  2003/06/05 14:48:12  gweber
%% Citations are now treated correctly if hyperref is loaded. This solves bugs 51 and 82
%% which are now closed.
%%
%% Revision 1.20  2003/06/04 13:42:10  gweber
%% The presence of the package hyperref is now autodetected and
%% the citeoption abnt-url-package=hyperref is loaded. In this way
%% whenever the user loads hyperref all url's given in the bibliografic
%% database are shown as links and can be navigated to. Note that
%% running as pdflatex loads hyperref also.
%%
%% Revision 1.19  2003/04/10 11:29:46  gweber
%% \citenumstyle redefined to \relax instead of \large. According to
%% the norm 6023/2000 the number label in the bibliography list is
%% of the same font size as the remaining entry.
%%
%% Revision 1.18  2003/04/08 00:38:43  gweber
%% further commands \loccit, \passim, \etseq and new behaviour of \citeauthor for num
%%
%% Revision 1.17  2003/04/07 12:22:55  gweber
%% The command \hiddenbibitem was implemented. It creates an entry which
%% does not appear in the bibliography list but creates all necessary keys
%% for citation. This is for use with the new \apud and \apudonline commands.
%% Further new commands: \Idem, \Ibidem, \opcit, \cfcite.
%%
%%

% How this package is organized:
% ------------------------------
% - Implementing `search for substring'
% - \AfterTheBibliography{} hook
% - Options declaration (search for substring needed here)
%     alf, num (default)
%     alfantigo, experimental (default)
%     biblabel-on-margin
%     sem-bibtex (apply settings without count with code in .bbl)
%     no-abnt-option-file (in case one defines its own options file)
%     recuo (then makes bibitem indent 1.8em) (default: NO indentation)
%     recuo=<length> (sets custom indentation)
%     indent   is an alias for recuo (indent or indent=<length>)
%     versalete  author in alf mode as with smallcaps
%     other options are considered "\citeoption's" (mechanism includes a
%       list that stores non defined options, and in \AtBeginDocument,
%       \citeoption acts over this list)
% - allocing auxiliar variables
% - \citeoption
%     Similar to \nocite, but does not complain about obviously not defined
%     citations. Intented to access options of abnTeX's bibtex styles.
% - \bibliography
%     extra care to auto include abnt-options as bibliography database (if
%     needed)
% - \bibliographystyle
%     if none is given, the style correspondent to the package style in
%     use (alf or num) is given.
% - Style customization
%     \authorcapstyle, \authorstyle, \yearstyle, \optionaltextstyle
%     (detail: \authorcapstyle's default setting uses \smaller from relsize
%     package, but only if package is present.)
% - \bibitem
%     defines action of \bibitem by its subcommands. Comatibility with old
%     abnt-alf is present.
% - \hiddenbibitem
%     creates an empty bibliography entry buts creates all labels.
% - \abntrefinfo
%     From the creation of abntcite, options are present as a separated
%     command. This enables compatibility with any bibtex style.
%
% - \cite
%     This command depends on if the style is alf or num
%     If alf, then \cite produces (<explicit (capital)>, <year>)
%     If num, then \cite produces a superscript with [<implicit (lowercase)>]
% - \citeonline
%     This command depends on if the style is alf or num
%     If alf, \citeonline produces <implicit (lowercase)>, (<year>)
%     If num, \citeonline then produces <implicit (lowercase)>
% - \citeyear
%     Produces <year>
% - \citeauthor
%     Produces <explicit (capital) author>
% - \citeauthoronline
%     Produces <implicit (lowercase) author>
% - \apud[comments]{First}{Second}
%     Produces a double citation: (FIRST, YEAR apud SECOND, YEAR<, comments>)
% - \apudonline[comments]{First]{Second]
%     Produces a double citation: First (apud SECOND, YEAR<, comments>)
% - \Idem[comments]{Author}
%     Produces: Id., YEAR<, comments>
% - \Ibidem[comments]{Author}
%     Produces: Ibid.<, comments>
% - \opcit[comments]{Author}
%     Produces: AUTHOR, op. cit.<, comments>
% - \cfcite[comments]{Author}
%     Produces: Cf. AUTHOR, YEAR<, comments>
%
% - implementing `recuo' (bibindent style)
% - Macros for output sorted and compressed numerical citations
%     [9,2,3,1,4,11,7,10] becames [1--4,7,9--11]

\NeedsTeXFormat{LaTeX2e}
%\input{cvs-id.def}
%\CVSExtract$Id: abntcite.sty,v 1.26 2003/10/13 09:40:41 gweber Exp $
%\CVSPackage{abntcite}{\space Chamadas de referencias no texto (NBR10520)} %substitui \ProvidesPackage (replaces \ProvidesPackage)

\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{abntex2abrev}
\RequirePackage{setspace}	%*****

%%%%%%  Options Declaration  %%%%%%


%----------------------------------------------------------------
%    Extracted from substr.sty (2000-06-15) 
%----------------------------------------------------------------
% Copyright 2000 Harald Harders <h.harders@tu-bs.de>
% Look at www.ctan.org for original package
%
% Commands:
%
% \IfSubStringInString{substring}{string}{true part}{false part}
% This command searches <substring> in <string> and executes the 
% <true part> if it is and else the <else part>

% expands the first and second argument with
% \protected@edef and calls #3 with them:
\ifx \su@ExpandTwoArgs\undefined 
   \newcommand{\su@ExpandTwoArgs}[3]{%
     \protected@edef\su@SubString{#1}%
     \protected@edef\su@String{#2}%
     \expandafter\expandafter\expandafter#3%
     \expandafter\expandafter\expandafter{%
       \expandafter\su@SubString\expandafter
     }\expandafter{\su@String}%
   }
\fi   
%%
%% tests if #1 in #2. If yes execute #3, else #4
\ifx \IfSubStringInString\undefined 
  \newcommand*{\IfSubStringInString}[2]{%
     \su@ExpandTwoArgs{#1}{#2}\su@IfSubStringInString
  }
\fi
%%
\ifx \su@IfSubStringInString\undefined 
   \newcommand*{\su@IfSubStringInString}[2]{%
     \def\su@compare##1#1##2\@nil{%
       \def\su@param{##2}%
       \ifx\su@param\@empty
         \expandafter\@secondoftwo
       \else
         \expandafter\@firstoftwo
       \fi
     }%
     \su@compare#2#1\@nil
   }
\fi

%----------------------------------------------------------------


% alf, num: main options
\newboolean{ABCItextondemand}

\DeclareOption{alf}{\def\AbntCitetype{alf}\setboolean{ABCItextondemand}{true}}
\DeclareOption{num}{\def\AbntCitetype{num}}
\ExecuteOptions{num}

% references on page foot
\newboolean{ABCIfoot}
\DeclareOption{foot}{\setboolean{ABCIfoot}{true}%
                     \setboolean{ABCItextondemand}{false}}
\DeclareOption{not-foot}{\setboolean{ABCIfoot}{false}%
                         \setboolean{ABCItextondemand}{true}}
\ExecuteOptions{not-foot}

% cite text on demand (defaults depends on foot or not-foot)
%  (also recall that options are executed in order of definition at
%    \ProcessOptions) 
\DeclareOption{load-text-on-demand}{\setboolean{ABCItextondemand}{true}}
\DeclareOption{load-text}{\setboolean{ABCItextondemand}{false}}

% compatibility with old abnt-alf.bst
\newboolean{ABCIcompoldalf}
\DeclareOption{alfantigo}{\setboolean{ABCIcompoldalf}{true}}
\DeclareOption{experimental}{\setboolean{ABCIcompoldalf}{false}}
\ExecuteOptions{experimental}

% biblabel-on-margin
\newboolean{ABCIbibjustif}
\DeclareOption{bibjustif}{\setboolean{ABCIbibjustif}{true}}
\DeclareOption{bibleftalign}{\setboolean{ABCIbibjustif}{false}}
\ExecuteOptions{bibleftalign}

% biblabel-on-margin
\newboolean{ABCIbiblabelonmargin}
\DeclareOption{biblabel-on-margin}
               {\setboolean{ABCIbiblabelonmargin}{true}}
\DeclareOption{biblabel-not-on-margin}
               {\setboolean{ABCIbiblabelonmargin}{false}}
\ExecuteOptions{biblabel-not-on-margin}

% \bibliography includes abnt-options automatically unless next option is used
\newboolean{ABCIauto-abntoptions}
\DeclareOption{abnt-option-file}{\setboolean{ABCIauto-abntoptions}{true}}
\DeclareOption{no-abnt-option-file}{\setboolean{ABCIauto-abntoptions}{false}}
\ExecuteOptions{abnt-option-file}

% recuo : compatibility with old norms
\ifx \bibindent\undefined
  \newlength{\bibindent}
\fi  
\setlength{\bibindent}{0em}
\DeclareOption{recuo}{\setlength{\bibindent}{1.8em}}

% indent : an alias to recuo
\DeclareOption{indent}{\setlength{\bibindent}{1.8em}}

\newcommand{\citebrackets}[2]{\def\citeopen{#1}\def\citeclose{#2}}
\newcommand{\setcitebrackets}{\citebrackets()}
% 10520:2002 now defines only two numerical styles
\newboolean{ABNTovercite}
\DeclareOption{overcite}{\setboolean{ABNTovercite}{true}}
\DeclareOption{inlinecite}{\setboolean{ABNTovercite}{false}}

% \authorcapstyle em versalete (smallcaps) como opcional
\newboolean{ABNTversalete}
\setboolean{ABNTversalete}{false}
\DeclareOption{versalete}{\setboolean{ABNTversalete}{true}}

% 10520:2002 does not allow (XX) or [XX] for superscript cites
\newboolean{ABNTstrictnumformat}

% Incorpora o arquivo nbr10520-2002.def do abntex1
% A norma NBR 10520:2002 removeu as opções [] e () para citações
% em superscrito
\ifx\AbntCitetype\AbntCitetypeALF
\else
\renewcommand{\setcitebrackets}{
\ifthenelse{\boolean{ABNTovercite}}{\citebrackets{}{}}{\citebrackets()}}
\fi

%
%  Allocing variables
%

% used for \@biblabel in num
\newlength{\minimumbiblabelwidth}
\newlength{\ABCIauxlen}

% auxiliar counters used in `sort and group' mechanism
\newcounter{ABCIaux}
\newcounter{ABCImax}

% Here I define a LaTeX list that will contain all options not defined
% before. 
%
% A LaTeX list is a command containing a comma separated list of
% itens. The list is processed by command \@for, as in \citeoption.
\def\citeoptionlist{}
% This command adds a string to the list.
\newcommand{\addtociteoptionlist}[1]{
  \ifthenelse{\equal{\citeoptionlist}{}}
    {\edef\citeoptionlist{#1}}
    {\edef\citeoptionlist{\citeoptionlist,#1}}
}


% suporting options in a keyval style
% recuo=<length> gives indentation of \bibitem
% other options: passed thought \citeoption (stored now in \citeoptionlist
%   and after (in \AtBeginDocument hook) \citeoption will act on it)

% To grab 6 letters. (recuo=)
\newcommand{\grabsix}[6]{}

% To grab 7 letters. (indent=)
\newcommand{\grabseven}[7]{}

\DeclareOption{abnt-substyle=COPPE}
  {\newcommand{\bibtextitlecommand}[2]{``#2''}%
   \addtociteoptionlist{abnt-substyle=COPPE}}

\DeclareOption*{
  \IfSubStringInString{recuo=}{\CurrentOption}
     {\setlength{\bibindent}{\expandafter\grabsix\CurrentOption}}
     {\IfSubStringInString{indent=}{\CurrentOption}
        {\setlength{\bibindent}{\expandafter\grabseven\CurrentOption}}
        {\addtociteoptionlist{\CurrentOption}}}
}

\provideboolean{ABNThyperref}

\@ifpackageloaded{hyperref}{%
\addtociteoptionlist{abnt-url-package=hyperref}
\setboolean{ABNThyperref}{true}
}{\setboolean{ABNThyperref}{false}}

\provideboolean{ABNTbackref} %By AWSS

\@ifpackageloaded{backref}{% %By AWSS
\setboolean{ABNTbackref}{true} %By AWSS
}{\setboolean{ABNTbackref}{false}} %By AWSS

\ProcessOptions

% really foot?
\ifthenelse{\boolean{ABCIfoot}\and\equal{\AbntCitetype}{num}}
  {\setboolean{ABCIfoot}{true}}
  {\setboolean{ABCIfoot}{false}}

% Now, after all options are processed, \citeoption process the list of
% options given as package options.
%
\ifthenelse{\equal{\citeoptionlist}{}}
  {}
  {\AtBeginDocument{\citeoption{\citeoptionlist}}}


% \citeoption - equal to \nocite  (I copied source from \nocite)
%               but not complains about this option be obviously undefined
\newboolean{ABCIciteoptionwasused}
\setboolean{ABCIciteoptionwasused}{false}
\def\citeoption#1{\@bsphack
  \@for\@citekey:=#1\do{%
    % next line eliminates white space before citation name
    \edef\@citekey{\expandafter\@firstofone\@citekey}%
    \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi
  }%
  \@esphack%
  \setboolean{ABCIciteoptionwasused}{true}%
}


%
% \bibliography{list of files .bib to be processed by bibTeX}
%
%   I had to redefine this command such that abnt-options.bib is
%   automatically used in case that some \citeoption was given as package
%   option. An entry
%      \bibliography{abnt-options,abnt-options,..}
%   produces an error in bibTeX. So I had to check if user already
%   includes abnt-options by (him/her)self.
%
%   implementation:
%
%     \citeoption was used?
%     If YES, (abnt-options must be given to bibtex!)
%       checks for abnt-options into parameter given to \bibliography
%       if present
%          user have included, so I don't add it once more
%       not present
%          I add necessary abnt-options
%     If NO
%       no changes to \bibliography

\def\bibliography#1{% ****
  {
	  \ifx \SingleSpacing\undefined
	    \singlespacing
	  \else
	    \SingleSpacing   
	  \fi  
	  %
	  \ifthenelse{\boolean{ABCIciteoptionwasused}
	               \and\boolean{ABCIauto-abntoptions}}
	   {
	   % this system of checking is not good...
	    \IfSubStringInString{abntex2-options}{#1}
	      {\if@filesw\immediate\write\@auxout{\string\bibdata{#1}}\fi}
	      {\if@filesw\immediate\write\@auxout{\string\bibdata{abntex2-options,#1}}\fi}
	      }
	   {
	    \if@filesw
	       \immediate\write\@auxout{\string\bibdata{#1}}%
	    \fi
	   }
	 \@input@{\jobname.bbl}
  }
 }


%
% The next piece of code looks if bibtexstyle is used or not, and if not,
% includes the respective style from the abntcite mode (alf or num)

\newboolean{ABCIbibtexstyleused}
\setboolean{ABCIbibtexstyleused}{false}

%
\def\bibliographystyle#1{%
  \ifx\@begindocumenthook\@undefined\else
    \expandafter\AtBeginDocument
  \fi
    {\if@filesw
       \immediate\write\@auxout{\string\bibstyle{#1}}%
     \fi}
  \setboolean{ABCIbibtexstyleused}{true}
  }

% \AtEndDocument is the last chace for include bibliography style..
\AtEndDocument{
  \ifthenelse{\not\boolean{ABCIbibtexstyleused}}
    {\bibliographystyle{abntex2-\AbntCitetype}}
    {}
}


% relsize used in \authorcapstyle. If package not present, \smaller=\relax
\IfFileExists{relsize.sty}
  {\RequirePackage{relsize}}
  {\let\smaller\relax}

%%%%%%%%%%%%%% Style %%%%%%%%%%%%%%%%%



\newcommand{\authorcapstyle}{\ifthenelse{\boolean{ABNTversalete}}{\smaller}{}}
\newcommand{\authorstyle}{\relax}
\newcommand{\yearstyle}{\relax}
\newcommand{\optionaltextstyle}{\relax}
\newcommand{\citenumstyle}{\relax}

\newlength{\biblabelsep}
\setlength{\biblabelsep}{1ex}

%%%%%%%%%%%%%%%%%%%%%  Implementation  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% automatic care for commas inside references
\providecommand{\ABCIccomma}{}
\newcommand{\ABCIcitecommadefault}{,\penalty\@m\ }
\newcommand{\ABCIcitecomma}{\ABCIccomma\let\ABCIccomma\ABCIcitecommadefault}
\newcommand{\ABCIinitcitecomma}{\def\ABCIccomma{}}
\newcommand{\ABCIcitecolondefault}{; }%{;\penalty\@m\ }


% How \bibitem works?
%   definition of \bibitem
%   \def\bibitem{\@ifnextchar\@lbibitem\@bibitem}

\ifthenelse{\boolean{ABCIcompoldalf}\and\equal{\AbntCitetype}{alf}}
{

% In the old mplementation on abnt-alf, the command \bibitem should be
%   \bibitem[{explicit}{implicit}{year}]{key}

  % if \bibitem has optional parameter, uses it (three pieces of data
  % stored into .aux file)

  \def\@lbibitem[#1#2#3]#4{
    \gdef\abntnextkey{#4}
    \item[\@biblabel{#1}\hfill]%
    \if@filesw
       {
        \let\protect\noexpand
        \immediate\write\@auxout{\string\bibcite{#4++EXPL}{#1}}
        \immediate\write\@auxout{\string\bibcite{#4++IMPL}{#2}}
        \immediate\write\@auxout{\string\bibcite{#4++YEAR}{#3}}
       }
    \fi%
    \ignorespaces
  }

  % if no optional is used, uses a list counter (stores its value into .aux)
  \def\@bibitem#1{
    \gdef\abntnextkey{#1}
    \item%
    \if@filesw
       {\immediate\write\@auxout{\string\bibcite{#1}{\the\value{\@listctr}}}}
    \fi%
    \ignorespaces
  }

}
{ %if normal mode (non-compatible with old alf)

 \ifthenelse{\boolean{ABCIfoot}}
  {
    % foot-num mode

    \def\@lbibitem[#1]#2{\gdef\abntnextkey{#2}}

    \def\@bibitem#1{\gdef\abntnextkey{#1}}

  }
  {
    \def\@lbibitem[#1]#2{
      \gdef\abntnextkey{#2}
      \item[\@biblabel{#1}\hfill]%
      \ifthenelse{\boolean{ABNThyperref}}{%
        \hyper@anchorstart{cite.#2}\relax\hyper@anchorend}{}%
      \if@filesw
         {
          \let\protect\noexpand
          \immediate\write\@auxout{\string\bibcite{#2}{#1}}
         }
      \fi%
      \ignorespaces
    }
  
    \def\@bibitem#1{
      \gdef\abntnextkey{#1}
  %    \ifthenelse{}{\item}{\item}
      \item%
      \ifthenelse{\boolean{ABNThyperref}}{%
        \hyper@anchorstart{cite.#1}\relax\hyper@anchorend}{}%
      \if@filesw
         {\immediate\write\@auxout{\string\bibcite{#1}{\the\value{\@listctr}}}}
      \fi%
      \ignorespaces
    }
  }
}

\newcommand{\hiddenbibitem}[2][]{\gdef\abntnextkey{#2}}

\newcommand{\ABCIgetcitetext}[1]{
  \if@filesw
    {\let\protect\noexpand
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++TEXT}{#1}}}%
  \fi}

\newcommand{\ABCIgetcitetextecho}[1]{\ABCIgetcitetext{#1}#1}

%we are repeating \bibcite command as defined in hyperref.sty
%so that we have it all together at one place.
\ifthenelse{\boolean{ABNThyperref}}{%
\renewcommand{\bibcite}[2]{%
 \@newl@bel{b}{#1}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteEXPL}[2]{%
 \@newl@bel{b}{#1++EXPL}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteIMPL}[2]{%
 \@newl@bel{b}{#1++IMPL}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
\newcommand{\bibciteYEAR}[2]{%
 \@newl@bel{b}{#1++YEAR}{\hyper@@link[cite]{}{cite.#1}{#2}}}%
}{}

\newcommand{\abntrefinfo}[3]{%
  \if@filesw
    {%
     \let\protect\noexpand
     \ifthenelse{\boolean{ABNThyperref}}{%
     \immediate\write\@auxout{\string\bibciteEXPL{\abntnextkey}{#1}}%
     \immediate\write\@auxout{\string\bibciteIMPL{\abntnextkey}{#2}}%
     \immediate\write\@auxout{\string\bibciteYEAR{\abntnextkey}{#3}}}{%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++EXPL}{#1}}%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++IMPL}{#2}}%
     \immediate\write\@auxout{\string\bibcite{\abntnextkey++YEAR}{#3}}}%
   }%
  \fi
  \ifthenelse{\boolean{ABCIfoot}}
     {\ifthenelse{\boolean{ABCItextondemand}}
        {\@ifundefined{ABCIdemand@\abntnextkey}
          {\let\ABCIprocesscitetext\@gobble}
          {\let\ABCIprocesscitetext\ABCIgetcitetext}}
        {\let\ABCIprocesscitetext\ABCIgetcitetext}}
     {\ifthenelse{\boolean{ABCItextondemand}}
        {\@ifundefined{ABCIdemand@\abntnextkey}
          {\let\ABCIprocesscitetext\relax}
          {\let\ABCIprocesscitetext\ABCIgetcitetextecho}}
        {\let\ABCIprocesscitetext\ABCIgetcitetextecho}}%
  \ABCIprocesscitetext
}


\newcommand{\ABCIdemand}[1]{\expandafter\gdef\csname ABCIdemand@#1\endcsname{}}


\def\AbntCitetypeALF{alf}

\let\ABCInewblock\newblock
\DeclareRobustCommand{\newblock}{\ABCInewblock}


%%%%%%%%%%%%%%%%%%%%  abnt-alf  %%%%%%%%%%%%%%%%%%%%%%%

% the next line was before \ifthenelse{\equal{\AbntCitetype}{alf}}

\setcitebrackets

\ifx\AbntCitetype\AbntCitetypeALF % if alf

  \renewcommand{\@biblabel}[1]{}
  

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  %               \cite[optional]{list of keys}
  %
  %  Implicit citation - author in capital letters and year; 
  %                       mechanism to deal with repeated names;
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  \renewcommand{\@cite}[2]%
    {\citeopen{#1\ifthenelse{\equal{#2}{}}{}{,
          {\optionaltextstyle#2}}}\citeclose}
  
  \DeclareRobustCommand{\cite}[2][]{%
  %
    \leavevmode
    \let\@citeprevious\@empty%
    \@cite{%
      \@for\@citekey:=#2\do%  \@citekey contains the key
        {%
         \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
         %
         % here, a tricky \let\@citename\"b@\@citekey++IMPL"
         \expandafter\let\expandafter\@citename%
             \csname b@\@citekey++IMPL\endcsname%
         \expandafter\let\expandafter\@citeyear%
             \csname b@\@citekey++YEAR\endcsname%
         \ifx\@citeprevious\@empty%
         \else%
           \ifx\@citename\@citeprevious%
              \ABCIcitecommadefault% echoing ", "
           \else%
              \ABCIcitecolondefault% echoing "; "
           \fi%
         \fi%
         % writing on aux file
         \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
         % if undefined bibitem
         \@ifundefined{b@\@citekey++IMPL}%
           {% if undefined
               {\bfseries??}% echoing ?
            \G@refundefinedtrue%
            \@latex@warning%
              {Citation `\@citekey' on page \thepage \space undefined}%
           }%
           {% if already defined
             \ifx\@citename\@citeprevious%
               {\yearstyle\@citeyear\@}\@%
             \else%
               {\authorcapstyle\@citename}, %
               {\yearstyle\@citeyear\@}%
             \fi%
             \let\@citeprevious\@citename%
           }%
           \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#2}}{}% By AWSS: put backref
        }% end for
    }{#1}%
  }
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  %             \citeonline[optional]{list of keys}
  %
  %  Inline (explicit) citation - author in "inline style" and year; 
  %                               mechanism to deal with repeated names;
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  \newcommand{\@citeonline}[2]%
    {{#1\ifthenelse{\equal{#2}{}}{}{, {\optionaltextstyle#2}}}\citeclose}
  
  \DeclareRobustCommand{\citeonline}[2][]{%
  %
    \leavevmode
    \let\@citeprevious\@empty%
    \@citeonline{%
      \@for\@citekey:=#2\do%\@citekey contains the key
        {%
         \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
         %
         % here, a tricky \let\@citename\"b@\@citekey++UP" :-)
         \expandafter\let\expandafter\@citename%
             \csname b@\@citekey++EXPL\endcsname%
         \expandafter\let\expandafter\@citeyear%
             \csname b@\@citekey++YEAR\endcsname%
         \ifx\@citeprevious\@empty%
         \else%
           \ifx\@citename\@citeprevious%       
             \ABCIcitecommadefault% echoing ", "
           \else%
             \citeclose, % echoing "), "
           \fi%   
         \fi%
         % writing in aux file
         \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
         \@ifundefined{b@\@citekey++EXPL}%
           {% if undefined
            {\bfseries??}% echoing ?
            \G@refundefinedtrue%
            \@latex@warning%
              {Citation `\@citekey' on page \thepage \space undefined}%
           }%
           {% if really defined
            \ifx\@citename\@citeprevious%
            \else%
               {\authorstyle\@citename\@{}} \citeopen%
            \fi%
            {\yearstyle\@citeyear\@}%
            \let\@citeprevious\@citename%
           }%
           \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#2}}{}% By AWSS: put backref
        }% end for
    }{#1}%
  }
  
  % "overcite" compatibility
  \let\citen\citeonline
  \let\citenum\citeonline

% end alf
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%  abnt-num  %%%%%%%%%%%%%%%%%%%%%%%%%%
%
%

\else % if not alf,

  \ifABCIfoot

     \renewenvironment{thebibliography}[1]{}{}

     \citebrackets{}{}

     \let\ABCIscriptfont\scriptsize
     \renewcommand{\newblock}{}

     \def\ABCI@cite#1#2{\raisebox{.8ex}%
         {\ABCIscriptfont\citeopen{#1\if@tempswa, #2\fi}\citeclose}}

     \def\ABCI@citeonline#1#2{{#1\if@tempswa, #2\fi}}

     \DeclareRobustCommand\cite{%
        \let\@cite\ABCI@cite%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \DeclareRobustCommand\citeonline{%
        \leavevmode\let\@cite\ABCI@citeonline%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \def\@citex[#1]#2{%
       \def\@safe@activesfalse{}%
       \ABCIinitcitecomma%
       \def\ABCIcitelist{}%
       \def\ABCIaftercitex{}% to put the footnotes
       \@cite{%
         \@for\@citeb:=#2\do%
            {%
             \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
             \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi%
             \@ifundefined{b@\@citeb++IMPL}%
                {%
                 {\bfseries??}%
                 \G@refundefinedtrue%
                 \@latex@warning%
                   {Citation `\@citeb' on page \thepage \space undefined}%
                }%
                {%
                 \@ifundefined{b@\@citeb}
                   {%
                    \stepcounter{footnote}%
                    \expandafter\xdef\csname b@\@citeb\endcsname{\thefootnote}%
                    \ABCItoken=\expandafter{\ABCIaftercitex}%
                    \xdef\ABCIaftercitex%
                       {\the\ABCItoken\noexpand\footnotetext%
                             {\noexpand\citetext{\@citeb}}}%
                   }
                   {}%
                 \expandafter\let\expandafter\ABCIcitation%
                               \csname b@\@citeb\endcsname%
                 % test for positive number
                 \ifcat _\ifnum\z@<0\ABCIcitation _\else A\fi
                    \ABCIaddtocitelist{\ABCIcitation}%
                 \else% else \ifcat
                    \ABCIcitecomma\hbox{\ABCIcitation}%
                 \fi% end \ifcat
                }%
            }%
         \ABCIoutputgroupedcitelist%
       }{#1}%
       \ABCIaftercitex%
     }

   \newcommand{\citeifnotcited}[1]{%
     \def\ABCIcitelist{}%
     \@for\@citeb:=#1\do%
        {%     
         \@ifundefined{b@\@citeb}
           {\ABCIaddtocitelist{\@citeb}}
           {}%
        }%
     \expandafter\cite\expandafter{\ABCIcitelist}%
   }     

   \newcommand{\citeonlineifnotcited}[1]{%
     \def\ABCIcitelist{}%
     \@for\@citeb:=#1\do%
        {%     
         \@ifundefined{b@\@citeb}
           {\ABCIaddtocitelist{\@citeb}}
           {}%
        }%
     \expandafter\citeonline\expandafter{\ABCIcitelist}%
   }     

   \newcommand{\ABCIaddtocitelist}[1]{%
     \ifthenelse{\equal{\ABCIcitelist}{}}%
       {\edef\ABCIcitelist{#1}}
       {\edef\ABCIcitelist{\ABCIcitelist,#1}}%
   }%

   \newcommand{\ifcited}[3]{\@ifundefined{b@#1}{#3}{#2}}

  \else % if num and NOT foot

     % this only works with proper settings in \ABCIthebibliformat
     \ifthenelse{\boolean{ABCIbiblabelonmargin}}
     {
     \renewcommand{\@biblabel}[1]%
        {\ifthenelse{\equal{#1}{}}{}{{\citenumstyle #1\hspace{\biblabelsep}}}}
     }
     {
     \renewcommand{\@biblabel}[1]%
        {%
         \ifthenelse{\equal{#1}{}}
           {}
           {%
            \def\biblabeltext{{\citenumstyle #1\hspace{\biblabelsep}}}%
            \settowidth{\ABCIauxlen}{\biblabeltext}%
            \ifthenelse{\lengthtest{\ABCIauxlen<\minimumbiblabelwidth}}
               {\setlength{\ABCIauxlen}{\minimumbiblabelwidth-\ABCIauxlen}}
               {\setlength{\ABCIauxlen}{0cm}}%
            {\biblabeltext\hspace{\ABCIauxlen}}%   
           }%
        }%
     }

     \let\ABCIscriptfont\scriptsize

     \ifthenelse{\boolean{ABNTovercite}}{%
     \def\ABCI@cite#1#2{\raisebox{1ex}%
         {\ABCIscriptfont\citeopen{#1\if@tempswa, #2\fi}\citeclose}}}{%
     \def\ABCI@cite#1#2{\citeopen{#1\if@tempswa, #2\fi}\citeclose}}

     \def\ABCI@citeonline#1#2{{#1\if@tempswa, #2\fi}}

     \DeclareRobustCommand\cite{%
        \let\@cite\ABCI@cite%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

     \DeclareRobustCommand\citeonline{%
        \leavevmode\let\@cite\ABCI@citeonline%
        \@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}

%      \renewcommand{\@openbib@code}%
%      {\setlength{\leftmargin}{0pt}\addtolength{\itemindent}{\labelsep}}


     \def\@citex[#1]#2{%
       \def\@safe@activesfalse{}%
       \ABCIinitcitecomma%
       \def\ABCIcitelist{}%
       \@cite{%
         \@for\@citeb:=#2\do%
            {%
             \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
             \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi%
             \@ifundefined{b@\@citeb}%
                {%
                 {\bfseries??}%
                 \G@refundefinedtrue%
                 \@latex@warning%
                   {Citation `\@citeb' on page \thepage \space undefined}%
                }%
                {%
                 \expandafter\let\expandafter\ABCIcitation%
                               \csname b@\@citeb\endcsname%
                 % test for positive number
                 \ifcat _\ifnum\z@<0\ABCIcitation _\else A\fi
                    \ABCIaddtocitelist{\ABCIcitation}%
                 \else% else \ifcat
                    \ABCIcitecomma\hbox{\ABCIcitation}%
                 \fi% end \ifcat
                }%
            }%
         \ABCIoutputgroupedcitelist%
       }{#1}%
     }

   \newcommand{\ABCIaddtocitelist}[1]{%
     \ifthenelse{\equal{\ABCIcitelist}{}}%
       {\edef\ABCIcitelist{#1}}
       {\edef\ABCIcitelist{\ABCIcitelist,#1}}%
   }%
  

  \fi
\fi % end if alf

\providecommand{\citeifnotcited}[1]{}
\providecommand{\citeonlineifnotcited}[1]{}
\providecommand{\ifcited}[3]{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%                \citeyear{list of keys}
%
%  Citation by year 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareRobustCommand{\citeyear}[1]{%
%
%  \let\@safe@activesfalse\@empty%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
%     \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%     
     \expandafter\let\expandafter\@citename%
          \csname b@\@citekey++YEAR\endcsname%
     %compare previous name with current name and decide the punctuation marks
     %if first use do nothing
     \ifx\@citeprevious\@empty%
     \else%
        , % echoing ", 
     \fi%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++YEAR}%
       {% if undefined
        {\bfseries??}% echoing ?
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
           {\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#1}}{}% By AWSS: put backref
    }% end for
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%               \citeauthor{list of keys}
%
%  Implicit citation (capital letters)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\DeclareRobustCommand{\citeauthor}[1]{%
%
%  \let\@safe@activesfalse\@empty%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
%     \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++IMPL\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++IMPL}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\authorcapstyle\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#1}}{}% By AWSS: put backref
    }% end for
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%             \citeauthoronline{list of keys}
%
%  Explicit citation (non capital letter)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\DeclareRobustCommand{\citeauthoronline}[1]{%
%
%  \let\@safe@activesfalse\@empty%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
%     \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++EXPL\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++EXPL}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\authorstyle\@citename\@}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#1}}{}% By AWSS: put backref
    }% end for
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%             \citetext{list of keys}
%
%  Text of the reference
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\DeclareRobustCommand{\citetext}[1]{%
%
%  \let\@safe@activesfalse\@empty%
  \leavevmode
  \let\@citeprevious\@empty%
  \@for\@citekey:=#1\do %\@citekey contains the key
    {%
%     \edef\@citekey{\expandafter\@firstofone\@citekey\@empty}%
     \expandafter\let\expandafter\@citename\csname b@\@citekey++TEXT\endcsname%
     % writing on aux file
     \if@filesw\immediate\write\@auxout{\string\citation{\@citekey}}\fi%
     \if@filesw\immediate\write\@auxout{\string\ABCIdemand{\@citekey}}\fi%
     % if undefined bibitem
     \@ifundefined{b@\@citekey++TEXT}%
       {% if undefined
        {\bfseries??}%
        \G@refundefinedtrue%
        \@latex@warning%
          {Citation `\@citekey' on page \thepage \space undefined}%
       }%
       {% if already defined
         \ifx\@citename\@citeprevious%
         \else%
            \relax
            \ifx\@citeprevious\@empty%
            \else%
              ; % echoing "; "
            \fi%
            {\@citename}%
         \fi%
         \let\@citeprevious\@citename%
       }%
       \ifthenelse{\boolean{ABNTbackref}}{\Hy@backout{#1}}{}% By AWSS: put backref
    }% end for
}


%
% Setting up `recuo' (=indent in Portuguese)
%

% To ensure that the margin settings of this package works, \leftmargin
% (inside thebibliography) must be 0cm. \@openbib@code is a hook inside
% thebibliography.
\let\@openbib@codeBACKUP\@openbib@code
\def\@openbib@code{\@openbib@codeBACKUP\setlength{\leftmargin}{0cm}}


% adding things after \begin{thebibliography}{}

\let\thebibliographyBkUp\thebibliography
\def\thebibliography#1{\thebibliographyBkUp{#1}\ABCIthebibliformat}

%
% \AfterTheBibliography{} hook
%

\newtoks\ABCItoken

\newcommand{\ABCIthebiblihook}{}

\newcommand{\AfterTheBibliography}[1]{
  \ABCItoken=\expandafter{\ABCIthebiblihook}
  \expandafter\def\expandafter\ABCIthebiblihook\expandafter{\the\ABCItoken#1}
}


\ifthenelse{\boolean{ABCIbibjustif}}
  {}
  {\AfterTheBibliography{\setlength{\rightskip}{0pt plus 2cm}}}

\ifthenelse{\equal{\AbntCitetype}{alf}}
  {% mode alf
   \newcommand{\ABCIthebibliformat}{
     \setlength{\leftskip}{\bibindent}
     \setlength{\labelwidth}{0cm}
     \setlength{\labelsep}{0cm}
     \setlength{\itemindent}{-\bibindent}
     \setlength{\listparindent}{0cm}
     \ABCIthebiblihook
     }     
  }
  {% mode num
   \ifthenelse{\boolean{ABCIbiblabelonmargin}}
     {
       \newcommand{\ABCIthebibliformat}{
         \setlength{\leftskip}{\bibindent}
         \setlength{\labelwidth}{10cm}
         \setlength{\labelsep}{0cm}
         \setlength{\itemindent}{-\bibindent}
         \setlength{\listparindent}{0cm}
         \setlength{\biblabelsep}{1.5ex}
         \ABCIthebiblihook
       }
     }
     {
       \newcommand{\ABCIthebibliformat}{
         \setlength{\leftskip}{\bibindent}
         \setlength{\labelwidth}{0cm}
         \setlength{\labelsep}{0cm}
         \setlength{\itemindent}{-\bibindent}
         \setlength{\listparindent}{0cm}
         \setlength{\minimumbiblabelwidth}{\leftskip}
         \ABCIthebiblihook
         }
         \AfterTheBibliography{
           \ifthenelse{\lengthtest{\minimumbiblabelwidth=0pt}}
             {\setlength{\biblabelsep}{1.8ex}}
             {\setlength{\biblabelsep}{1ex}}
         }
     }
  }




%---------------------------------------------------------------%
%  Macros for output sorted and compressed numerical citations  %
%---------------------------------------------------------------%


% Store to maximum of a given list to the counter "ABCImax"
\newcommand{\maximuminlist}[1]{%
  \setcounter{ABCImax}{0}%
  \@for\ABCIaux:=#1\do%
     {%
      \setcounter{ABCIaux}{\ABCIaux}%
      \ifnum \value{ABCIaux}>\value{ABCImax}%
         \setcounter{ABCImax}{\value{ABCIaux}}%
      \fi%
     }%
}

% It takes a command containing a comma separeted list of
% positive numbers and redefines the original command with
% the list without its maximum element.
\newcommand{\ABCIlistwithoutmaximum}[1]{%
  \maximuminlist{#1}%
  \let\ABCItemplist#1%
  \def#1{}%
  \def\ABCIcomma{}%
  \@for\ABCIaux:=\ABCItemplist\do%
    {%
      \ifnum\ABCIaux<\value{ABCImax}%
        \edef#1{#1\ABCIcomma\ABCIaux}%
        \def\ABCIcomma{,}%
      \fi%
    }%
}

% It requires a command containing a comma separeted list of
% positive numbers. It redefines that command with the same
% list, but sorted.
\newcommand{\ABCIsortlist}[1]{%
  \edef\ABCItempslist{#1}%
  \def#1{}%
  \def\ABCIcomma{}%
  \whiledo{\not\equal{\ABCItempslist}{}}%
    {%
     \maximuminlist{\ABCItempslist}%
     \edef#1{\arabic{ABCImax}\ABCIcomma#1}%
     \def\ABCIcomma{,}%
     \ABCIlistwithoutmaximum{\ABCItempslist}%
    }%
}

% \ifconsecutive{num1}{num2}{block1}{block2}
% executes block1 if num1 = num2+1 and block2 otherwise.
\newcommand{\ifconsecutive}[4]{%
  \@tempcnta#1%
  \@tempcntb#2%
  \advance\@tempcntb 1 %
  \ifnum\@tempcnta=\@tempcntb#3\else#4\fi%
}

%
% It sorts and outputs in grouped way the list \ABCIcitelist generated in
% \cite when in `num' mode.
%
\newcommand{\ABCIoutputgroupedcitelist}{%
  \ifthenelse{\equal{\ABCIcitelist}{}}%
    {}%
    {%
     \ABCIsortlist{\ABCIcitelist}%
     \setcounter{ABCIaux}{0}%
     \@for \ABCIaux:=\ABCIcitelist\do%
       {%
        \ifthenelse{\value{ABCIaux}=0}%
          {%
           \let\ABCIfirst\ABCIaux%
           \let\ABCIlast\ABCIaux%
           \setcounter{ABCIaux}{1}%
          }%
          {%
           \ifconsecutive{\ABCIaux}{\ABCIlast}%
             {%
              \let\ABCIlast\ABCIaux%
              \addtocounter{ABCIaux}{1}%
             }%
             {%
              \ifthenelse{\value{ABCIaux}=1}%
                {%
                 \ABCIcitecomma\ABCIfirst%
                }%
                {%
                 \ifthenelse{\value{ABCIaux}=2}%
                   {%
                    \ABCIcitecomma\ABCIfirst%
                    \ABCIcitecomma\ABCIlast%
                   }%
                   {%
                    \ABCIcitecomma\ABCIfirst--\ABCIlast%
                   }%
                }%
              \let\ABCIfirst\ABCIaux%
              \let\ABCIlast\ABCIaux%
              \setcounter{ABCIaux}{1}%
             }%
          }%
       }%
     \ifthenelse{\value{ABCIaux}=1}%
       {%
        \ABCIcitecomma\ABCIfirst%
       }%
       {%
        \ifthenelse{\value{ABCIaux}=2}%
          {%
           \ABCIcitecomma\ABCIfirst%
           \ABCIcitecomma\ABCIlast%
          }%
          {%
           \ABCIcitecomma\ABCIfirst--\ABCIlast%
          }%
       }%
     }%
}

\newcommand{\apudname}{apud}
\newcommand{\Idemname}{Id.}
\newcommand{\Ibidemname}{Ibid.}
\newcommand{\opcitname}{op.\ cit.}
\newcommand{\passimname}{passim}
\newcommand{\loccitname}{loc.\ cit.}
\newcommand{\cfcitename}{Cf.}
\newcommand{\etseqname}{et seq.}

\DeclareRobustCommand{\footciteref}[1]{%
\footnote{\citetext{#1}}
}

\newcommand{\apud}[3][]{(\citeauthor{#2}, \citeyear{#2} \apudname\ %
\citeauthor{#3}, \citeyear{#3}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1})}

\newcommand{\apudonline}[3][]{\citeauthoronline{#2} (\citeyear{#2} \apudname\ %
\citeauthor{#3}, \citeyear{#3}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1})}

\newcommand{\Idem}[2][]{\Idemname, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\Ibidem}[2][]{\Ibidemname%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\opcit}[2][]{\citeauthor{#2}, \opcitname%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\passim}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \passimname}

\newcommand{\loccit}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \loccitname}

\newcommand{\cfcite}[2][]{\cfcitename\ \citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}}

\newcommand{\etseq}[2][]{\citeauthor{#2}, \citeyear{#2}%
\ifthenelse{\equal{#1}{\empty}}{}{, #1}, \etseqname}

\ifthenelse{\equal{\AbntCitetype}{num}}%
{\renewcommand{\citeauthor}[1]{\citeauthoronline{#1}\cite{#1}}}{}


\endinput


